6. Rollen en permissies configureren
Nu je gebruikers en rollen hebt gedefinieerd, is het tijd om te configureren wat elke rol mag doen. Permissies worden gedefinieerd per collectie én per HTTP-methode. Zo kun je bijvoorbeeld aangeven dat een rol alle collecties mag bekijken, maar dat alleen een admin nieuwe items aan die collectie mag toevoegen.
Permissies structuur
Permissies worden gedefinieerd in het permissions
-object binnen elke collectie. Voor elke HTTP-methode (GET, POST,
PUT, DELETE) specificeer je welke rollen toegang hebben. Wanneer een HTTP-methode van een collectie niet beveiligd is -
gebruikers moeten bijvoorbeeld de producten kunnen bekijken, ongeacht of ze ingelogd zijn - geef je dit aan met
"anonymous"
.
{ "permissions": { "GET": [ "anonymous", "user", "admin" ], "POST": [ "admin" ], "PUT": [ "admin" ], "DELETE": [ "admin" ] } }
HTTP-methoden en hun betekenis
Methode | Operatie | Beschrijving |
---|---|---|
GET |
Lezen | Gegevens ophalen uit de collectie |
POST |
Creëren | Nieuwe items toevoegen aan de collectie |
PUT |
Bijwerken | Bestaande items bijwerken in de collectie |
PATCH |
Gedeeltelijk bijwerken | Bestaande items bijwerken in de collectie |
DELETE |
Verwijderen | Items verwijderen uit de collectie |
Permissies per collectie
Elke collectie heeft zijn eigen permissies. Dit geeft je zeer gedetailleerde controle over wie wat mag doen:
{ "collections": [ { "name": "products", "fields": [ // Velden hier ], "permissions": { "GET": [ "anonymous", "user", "admin" ], "POST": [ "admin", "inventory" ], "PUT": [ "admin", "inventory" ], "DELETE": [ "admin" ] } }, { "name": "orders", "fields": [ // Velden hier ], "permissions": { "GET": [ "user", "admin" ], "POST": [ "user" ], "PUT": [ "admin" ], "DELETE": [ "admin" ] } } ] }
In bovenstaand voorbeeld kunnen producten kunnen door iedereen bekeken worden (dus ook gebruikers die niet zijn ingelogd), maar alleen beheerders en voorraadbeheerders kunnen ze toevoegen of wijzigen. Verwijderen kan alleen door de admin gedaan worden. Bestellingen kunnen alleen bekeken worden door de gebruiker die ze heeft geplaatst, en door admins.
Uitgebreid voorbeeld: Webshop permissies
Hier is een voorbeeld van permissies voor een webshop:
{ "collections": [ { "name": "products", "fields": [ { "Name": "id", "Type": "number", "Required": true }, { "Name": "name", "Type": "string", "Required": true, "Min": 2, "Max": 100 }, { "Name": "description", "Type": "string", "Max": 1000 }, { "Name": "price", "Type": "number", "Required": true, "Min": 0, "Default": 0 }, { "Name": "stock", "Type": "number", "Required": true, "Min": 0, "Default": 0 }, { "Name": "categoryId", "Type": "reference:categories", "Required": true }, { "Name": "imageUrl", "Type": "string", "Max": 255 } ], "permissions": { "GET": [ "anonymous", "user", "employee", "inventory", "admin" ], "POST": [ "admin", "inventory" ], "PUT": [ "admin", "inventory" ], "DELETE": [ "admin" ] } }, { "name": "categories", "fields": [ { "Name": "id", "Type": "number", "Required": true }, { "Name": "name", "Type": "string", "Required": true, "Min": 2, "Max": 50 }, { "Name": "description", "Type": "string", "Max": 500 } ], "permissions": { "GET": [ "anonymous", "user", "employee", "inventory", "admin" ], "POST": [ "admin" ], "PUT": [ "admin" ], "DELETE": [ "admin" ] } }, { "name": "orders", "fields": [ { "Name": "id", "Type": "number", "Required": true }, { "Name": "userId", "Type": "reference:users", "Required": true }, { "Name": "orderDate", "Type": "date", "Required": true, "Default": "CurrentDate" }, { "Name": "status", "Type": "string", "Required": true, "Default": "pending" }, { "Name": "total", "Type": "number", "Required": true, "Min": 0, "Default": 0 } ], "permissions": { "GET": [ "user", "employee", "admin" ], "POST": [ "user" ], "PUT": [ "employee", "admin" ], "DELETE": [ "admin" ] } } ] }
Permissiestrategieën
Openbare toegang (open): Gebruik de
anonymous
rol voor collecties die publiek toegankelijk moeten zijn"GET": ["anonymous", "user", "admin"]
Alleen aangemelde gebruikers (authenticated): Geef alleen toegang aan geauthenticeerde gebruikers
"GET": ["user", "admin"]
Alleen beheerders (restricted): Beperk de toegang tot alleen beheerders
"GET": ["admin"]
Functiespecifieke toegang: Geef toegang op basis van specifieke rollen
"POST": ["inventory", "admin"]
Best practices voor permissies
- Principle of least privilege: Geef alleen de minimale toegang die nodig is. Iemand "voor de zekerheid" bewerk-rechten geven, is niet zo'n goed idee.
- Bescherm gevoelige operaties: Beperk DELETE en PUT operaties zoveel mogelijk tot beheerdersrollen, behalve als het gaat om dingen als blogposts, reacties en andere items die gebruikers zelf mogen creëren.
- Gebruik specifieke rollen: Maak rollen die specifiek zijn voor bepaalde verantwoordelijkheden, zoals
inventory
- Consistent beleid: Houd een consistent permissiebeleid voor vergelijkbare collecties
In de volgende sectie zullen we leren hoe je kunt inloggen en een JWT-token kunt verkrijgen.